/**
 * @author ：wang-ting
 * @Date：2025/5/13 8:09
 */

/**
 * 本关任务：设计一个名为Circle2D的类，表示平面上的圆形。这个类包括：
 *
 * double型私有数据域x和y（表示圆心坐标）及其访问器（获取方法）。
 * double型私有数据域radius（表示圆的半径）及其访问器（获取方法）。
 * 无参构造方法Circle2D()，创建一个圆心为（0,0）,半径为1的圆对象。
 * 构造方法Circle2D(double x, double y, double radius)，根据指定的x，y和raduius创建圆对象。
 * 返回圆面积的方法getArea()，圆周率使用Math.PI。
 * 返回圆周长的方法getPerimeter(),圆周率使用Math.PI。
 * 方法contains(double x, double y)，返回给定的点（x,y）是否在圆内部的判断结果（true或false），如教材362页图10-21a所示。
 * 方法contains(Circle2D circle)，返回给定的圆circle是否在当前圆内部的判断结果true或false），如教材362页图10-21b所示。
 * 方法overlaps(Circle2D circle)，返回给定的圆circle是否与当前圆重叠的判断结果true或false），如教材362页图10-21c所示。
 */
//以下为题目给的部分
import java.util.Scanner;
public class TestCircle2D {
    public static void main(String[] args) {
        Scanner input =  new Scanner(System.in);
        double x,y,radius;
        x = input.nextDouble();
        y = input.nextDouble();
        radius = input.nextDouble();
        Circle2D c1 = new Circle2D(x, y, radius);
        System.out.println("Area is " + c1.getArea());
        System.out.println("Perimeter is " + c1.getPerimeter());
        System.out.println("c1 contains point (3, 3)? "
                + c1.contains(3, 3));
        System.out.println("c1 contains circle Circle2D(4, 5, 10.5)? "
                + c1.contains(new Circle2D(4, 5, 10.5)));
        System.out.println("c1 overlaps circle Circle2D(3, 5, 2.3)? "
                + c1.overlaps(new Circle2D(3, 5, 2.3)));
    }
}
//以下为需要写的部分
 class Circle2D {
    private double x,y;             //double型私有数据域x和y（表示圆心坐标）及其访问器（获取方法）。
    private double radius;          //double型私有数据域radius（表示圆的半径）及其访问器（获取方法）。

    /**
     * 构造方法Circle2D(double x, double y, double radius)，根据指定的x，y和raduius创建圆对象。
     * @param x
     * @param y
     * @param radius
     */

    public  Circle2D(double x,double y,double radius){
        this.x = x;
        this.y = y;
        this.radius = radius;
    }


    /**
     * 无参构造方法Circle2D()，创建一个圆心为（0,0）,半径为1的圆对象。
     */

    public Circle2D(){
        x = 0;
        y = 0;
        radius = 1;
    }


    /**
     *  返回圆面积的方法getArea()，圆周率使用Math.PI。
     * @return 返回圆面积
     */
    public double getArea(){
        double k = Math.PI * radius * radius;
        return k;
    }


    /**
     * 返回圆周长的方法getPerimeter(),圆周率使用Math.PI。
     * @return 返回圆周长
     */
    public double getPerimeter(){
        double m = Math.PI * 2 * radius;
        return m;
    }

    /**
     * 方法contains(double x, double y)，返回给定的点（x,y）是否在圆内部的判断结果（true或false），如教材362页图10-21a所示。
     * 判断一个点 (x, y) 是否在圆内部，可以通过计算点到圆心的距离是否小于或等于圆的半径来实现。
     * @param x 点的x坐标
     * @param y  点的y坐标
     * @return  如果在圆内返回true，否则返回false
     */
    public boolean contains(double x, double y){
        double h = Math.sqrt((x - this.x) * (x - this.x) + (y - this.y) * (y - this.y));//点到圆心的距离
        if(h < this.radius){
            return true;
        }else{
            return false;
        }
    }

    /**
     * 方法contains(Circle2D circle)，返回给定的圆circle是否在当前圆内部的判断结果true或false），如教材362页图10-21b所示。
     * 判断一个圆 circle 是否完全包含在另一个圆内部，需要满足以下条件：两个圆的圆心距离 + 小圆的半径 ≤ 大圆的半径
     * @param circle 另一个圆
     * @return 如果另一个圆完全在当前圆内返回true，否则返回false
     */
    public boolean contains(Circle2D circle) {
        double distance = Math.sqrt(Math.pow(circle.x - this.x, 2) + Math.pow(circle.y - this.y, 2));
        return distance + circle.radius <= this.radius;
    }

    /**
     * 两个圆重叠的条件是：
     * 圆心距离 < 半径1 + 半径2
     * 并且
     * 两圆不是包含关系（但此题中包含也算重叠）
     * @param circle
     * @return
     */
    public boolean overlaps(Circle2D circle) {
        double distance = Math.sqrt(Math.pow(circle.x - this.x, 2) + Math.pow(circle.y - this.y, 2));
        if(distance < (this.radius + circle.radius) ){
            return true;
        }else{
            return false;
        }

    }
}